home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / program / 331 / gemfsc14 / aessrc14 / aesutob1.s < prev    next >
Text File  |  1989-08-26  |  5KB  |  112 lines

  1.  
  2. ;*========================================================================
  3. ;*
  4. ;* AESFAST Public Domain GEM bindings.
  5. ;*
  6. ;*========================================================================
  7.  
  8. ;*************************************************************************
  9. ;*
  10. ;* AESUTOB1.S - Object-related utilities 1 of n.
  11. ;*  Non-standard utility functions.
  12. ;*
  13. ;* 08/28/89 -   v1.3
  14. ;*              Renamed objfl_change to obj_flchange.
  15. ;*              Renamed objst_change to obj_stchange.
  16. ;*************************************************************************
  17.          
  18.           .extern   _objc_draw          ; We call this standard AES func.
  19.           .extern   _objcl_calc         ; We call this non-standard util.
  20.           
  21.           .include  "gemfast.sh"        ; Pull in header file.
  22.  
  23. ;-------------------------------------------------------------------------
  24. ; obj_flchange - Set or reset object flag, optionally update screen.
  25. ;                If high bit of new flags is set (negative) the flags
  26. ;                will be ANDed, otherwise they're ORed.  Confused?  This
  27. ;                allows the following to work as you'd expect:
  28. ;
  29. ; obj_flchange(maintree, BOX3,  HIDETREE, TRUE): /* hide   box3, redraw /
  30. ; obj_flchange(maintree, BOX3, ~HIDETREE, TRUE): /* unhide box3, redraw */ 
  31. ;
  32. ;  void obj_flchange(tree, object, flagmask, update);
  33. ;-------------------------------------------------------------------------
  34.  
  35. _obj_flchange::
  36.  
  37.           .cargs    #8,.ptree.l,.obj.w,.flag.w,.update.w
  38.           link      a6,#0
  39.           
  40.           move.l    .ptree(a6),a0       ; Build a pointer to the
  41.           move.w    .obj(a6),d0         ; desired object in
  42.           muls      #OBJ_SIZ,d0         ; the tree.
  43.           add.l     d0,a0
  44.           
  45.           move.w    .flag(a6),d0        ; Get/check the flag(s) to change.
  46.           bmi.s     .reset              ; If neg, we need to reset flag,
  47.           or.w      d0,ob_flags(a0)     ; else we set flag,
  48.           bra.s     .checkupdate        ; and continue below.
  49. .reset:
  50.           and.w     d0,ob_flags(a0)     ; Reset the flag.
  51. .checkupdate:
  52.           tst.w     .update(a6)         ; Does caller want objc_draw?
  53.           beq.s     .done               ; If not, we're done.
  54.  
  55.           clr.l     -(sp)
  56.           clr.l     -(sp)               ; Allocate clipping rectangle then
  57.           move.l    sp,(sp)             ; make 1st long point to itself.
  58.           move.w    .obj(a6),-(sp)      ; Stack the tree and object index,
  59.           move.l    .ptree(a6),-(sp)    ; and call the grect clip calc'er.
  60.           jsr       _objcl_calc         ; It will overlay the pointer we
  61.           addq.l    #6,sp               ; stacked with the clip info, clean
  62.           move.w    #9,-(sp)            ; the stack up to the clip info, 
  63.           clr.w     -(sp)               ; then stack up objc_draw parms to
  64.           move.l    .ptree(a6),-(sp)    ; to a redraw of the whole tree,
  65.           jsr       _objc_draw          ; clipped by the object we changed.
  66. .done:
  67.           unlk      a6                  ; Unstack everything, and
  68.           rts                           ; return to caller.
  69.           
  70. ;-------------------------------------------------------------------------
  71. ; obj_stchange - Set or reset object state, optionally update screen.
  72. ;                If high bit of new flags is set (negative) the flags
  73. ;                will be ANDed, otherwise they're ORed.  Confused?  This
  74. ;                allows the following to work as you'd expect:
  75. ;
  76. ; obj_stchange(maintree, BTN3,  SELECTED, TRUE): /* sel    btn3, redraw /
  77. ; obj_stchange(maintree, BTN3, ~SELECTED, TRUE): /* desel  btn3, redraw */ 
  78. ;
  79. ;  void obj_stchange(tree, object, flagmask, update);
  80. ;-------------------------------------------------------------------------
  81.  
  82. _obj_stchange::
  83.  
  84.           .cargs    #8,.ptree.l,.obj.w,.flag.w,.update.w
  85.           link a6,#0
  86.           
  87.           move.l    .ptree(a6),a0       ; Build a pointer to the
  88.           move.w    .obj(a6),d0         ; desired object in
  89.           muls      #OBJ_SIZ,d0         ; the tree.
  90.           add.l     d0,a0
  91.           
  92.           move.w    .flag(a6),d0        ; Get/check the flag(s) to change.
  93.           bmi.s     .reset              ; If neg, we need to reset flag,
  94.           or.w      d0,ob_state(a0)     ; else we set flag,
  95.           bra.s     .checkupdate        ; and continue below.
  96. .reset:
  97.           and.w     d0,ob_state(a0)     ; Reset the flag.
  98. .checkupdate:
  99.           tst.w     .update(a6)         ; Does caller want objc_draw?
  100.           beq.s     .done               ; If not, we're done.
  101.  
  102.           move.l    #$7FFF7FFF,-(sp)    ; Do objc_draw on object, with
  103.           clr.l     -(sp)               ; a max-sized clipping rectangle.
  104.           move.w    #9,-(sp)            ; 
  105.           move.w    .obj(a6),-(sp)      ; Start draw at changed object.
  106.           move.l    .ptree(a6),-(sp)    ; 
  107.           jsr       _objc_draw          ; Go do it.
  108. .done:
  109.           unlk      a6                  ; Unstack everything, and
  110.           rts                           ; return to caller.
  111.           
  112.